#ifndef __DYNAMICARRAY_H__
#define __DYNAMICARRAY_H__

#define ElementType int

class DynamicArray
{
public:
    DynamicArray();
    DynamicArray(int capacity);
    DynamicArray(const DynamicArray &a);
    ~DynamicArray();

public:
    /* 打印 */
    void show(void (*printFunc)(ElementType arg));

    /* 扩容函数 */
    void expandCapacity(int capacity);

    /* 缩容函数 */
    void shrinkCapacity(int capacity);
    
    /* 动态数组插入元素(尾插) */
    void InsertTail(ElementType data);

    /* 指定位置插入元素 */
    void InsertAppointPos(int index, ElementType data);

    /* 动态数组删除元素(尾删) */
    void RemoveTail();

    /* 指定位置删除元素 */
    void RemoveAppointPos(int index);

    /* 删除指定元素 */
    void RemoveAppointElement(ElementType data, int (*strcmpFunc)(ElementType arg1, ElementType arg2));

    /*重载方括号*/
    ElementType & operator[](int index);

    /*获取数组元素个数*/
    int getsize();

    /*设置元素的个数加一*/
    void setSizeInc();
    /*设置数组的元素减一.*/
    void setSizeDec();

private:
    int m_size;
    int m_capacity;
    ElementType *m_data;
};

#endif //__DYNAMICARRAY_H__